#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

// class Solution {
// public:
//     bool CheckPermutation(string s1, string s2) {
//         int len1 = s1.length(),len2 = s2.length();
//         if(len1 != len2) { return false; }
//         else
//         {
//             int ascii[128] = {0};
//             for(int i = 0;i < len1; ++i)
//             {
//                 ascii[s1[i]]++;
//                 ascii[s2[i]]--;
//             }
//             for(int i = 0;i < 128; ++i)
//             {
//                 if(ascii[i] != 0) return false;
//             }
//             return true;
//         }
//     }
// };

class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
        int len1 = s1.length(),len2 = s2.length();
        if(len1 != len2) { return false; }
        else
        {
            unordered_map<char,int> umap;
            for(int i = 0;i < len1;++i)
            {
                ++umap[s1[i]];
                --umap[s2[i]];
            }
            for(int i = 0;i < len1;++i)
            {
                if(umap[s1[i]] != 0 || umap[s2[i]]) return false;
            }
            return true;
        }
    }
};
int main()
{
    Solution sol;
    cout << sol.CheckPermutation("zhangyazhou","yazhouzhang") << endl;
    return 0;
}